﻿(function ($)
{

    var currentPage = 1;
    var maxPage = 0;
    var index = 0;
    var refreshPage;
    var currentSelectPageItemIndex = 0;
    $.fn.Pager = function (options)
    {


        var defaultOptions =
            {
                container: null,
                rowCount:0,
                pagesize: 20,
                refreshDatasource: null,
                //刷新页面的函数 ,
                currentPage:1
                
            }


        var opts = $.extend(defaultOptions, options);
        currentPage = opts.currentPage;
        //最大页数
        var GetMaxPage = function (rowCount) {
            return Math.ceil(parseFloat(parseInt(rowCount))
                    / parseFloat(parseInt(opts.pagesize)));
        }
        //画页数
        var PaintPager = function (element) {
            var $pagerItem = $("<span id=\"pagerItem\"></span>");
            var $proviewPageItem = $("<span>上一页</span>");
            var $nextPageItem = $("<span>下一页</span>");
            var $nextMorePageItem = $("<span>...</span>");
            var $normalPageItem = $("<span></span>");
          

            //最大页数
            maxPage = GetMaxPage(opts.rowCount);
            var $maxPageItem = $("<span id=\"maxPager_Pager\">" + maxPage + "</span>");
            /*****************************初始化页数*****************************************/
            if (maxPage > 1) {

                $pagerItem.append($proviewPageItem);
                for (var i = 0; i < maxPage; i++) {

                    $normalPageItem.append("<span>" + (i + 1) + "</span>");
                    if ((i + 1) % 5 == 0) {

                        $pagerItem.append($normalPageItem);

                        $pagerItem.append($nextMorePageItem);
                        if (maxPage == 5) {
                            $maxPageItem.hide();
                            $nextPageItem.hide();
                            $nextMorePageItem.hide();
                        } $pagerItem.append($maxPageItem);
                        $pagerItem.append($nextPageItem);
                        break;

                    } else if (maxPage <= 5) {

                        $pagerItem.append($normalPageItem);

                    }

                }
            };
            //添加页数
            element.append($pagerItem);
            //添加页数
            element.append($pagerItem);
            //currentPage = 1;
            /********************************添加选中选的样式****************************/
            $('span:first', $normalPageItem).addClass("selectedPageItem");
            $('span:first', $normalPageItem).siblings().removeClass("selectedPageItem");


            //刷新页数
            refreshPage = function (page, rowCount) 
            {
                $nextMorePageItem.show();
                $nextPageItem.show();
                $maxPageItem.show();
                $normalPageItem.show();
                $proviewPageItem.show()

                $('span', $normalPageItem).removeClass("selectedPageItem");
                var index = 0;
                maxPage = GetMaxPage(rowCount);
                if (rowCount == 0)
                {
                    $nextMorePageItem.hide();
                    $nextPageItem.hide();
                    $maxPageItem.hide();
                    $normalPageItem.hide();
                    $proviewPageItem.hide();

                }
                var firstPageItem = 0;
                var selectPageItem = 0;
                if (page != (maxPage + 1)) {

                    if ((maxPage - page) > 5) {

                        index = 0;
                        selectPageItem = page % 5;
                        if (page % 5 == 0) {
                            selectPageItem = 4;
                            firstPageItem = page - 5;
                        } else {
                            firstPageItem = page - selectPageItem;
                        }
                        currentPage = firstPageItem;
                        for (var i = firstPageItem ; i <= (firstPageItem + 5) ; i++) {

                            if (index == 5) {
     
                                $maxPageItem.text(maxPage);
                                break;

                            }
                            $('span', $normalPageItem).eq(index).text((i + 1));
                            index++;

                        }
                    }
                    else if ((maxPage - page) <= 5) {
                        index = 0;
                        firstPageItem = 0;
                        if (maxPage < 5) {

                            currentPage = 1;
                            for (var i = 0; i <= 5; i++) {

                                if (index == 5) {
                                    $maxPageItem.text(maxPage);
                              


                                }
                                $('span', $normalPageItem).eq(index).text("");
                                if (i < maxPage) {
                                    $('span', $normalPageItem).eq(index).text(i + 1);
                                }

                                index++;


                            };
                            $nextMorePageItem.hide();
                            $nextPageItem.hide();
                            $maxPageItem.hide();
                        }
                        else {
                       
                            currentPage = (maxPage - 5);
                            if (currentPage == 0) {
                                currentPage = 1;
                                
                            }
                        
                                for (var i = currentPage ; i <= (maxPage) ; i++) {

                                    if (index == 5) {
                              
                                        $maxPageItem.text(maxPage);
                                        break;
                                    }
                                    if (i < maxPage) {
                                        $('span', $normalPageItem).eq(index).text(i);
                                    } else {
                                        $('span', $normalPageItem).eq(index).hide();
                                    }
                                    if (maxPage == 5)
                                    {
                                        $maxPageItem.text(maxPage);
                                        $nextPageItem.hide();
                                        $nextMorePageItem.hide();
                                    }
                                    index++;
                                   
                                }
                              


                            
                        }
                    }
                } else {
                    //如果第是最大页被删除，则
                    if (maxPage >= 5) {
                        firstPageItem = maxPage - 5;
                        selectPageItem = 4;
                        index = 0;
                    currentPage = firstPageItem;
                    for (var i = firstPageItem; i <= maxPage; i++) {

                        if (index == 5) {

                            $maxPageItem.addClass("selectedPageItem");

                            $maxPageItem.text(maxPage);
                            break;
                        }
                        if (i < maxPage) {
                            $('span', $normalPageItem).eq(index).text(i);
                        }
                        index++;
                    }
                    } else {
                        firstPageItem = 1;
                        selectPageItem = maxPage - 1;
                        for (var i = 0; i < 5; i++) {
                            $('span', $normalPageItem).eq(i).text("");
                            if (i < maxPage) {
                                $('span', $normalPageItem).eq(i).text(i + 1);
                            }
                          
                        }
               
                        $nextPageItem.hide();
                        $nextMorePageItem.hide();
                        $maxPageItem.hide();
                    }

                }
                $.each($("span", $pagerItem), function () {


                    if ($(this).text() == page) {
                        $(this).addClass("selectedPageItem");
                        $(this).siblings().removeClass("selectedPageItem");

                    }
                });

               
                return page;

            }

            /******************上一页点击********************************************************/
            $proviewPageItem.click(function () {
                if (opts.refreshDatasource) {
                    var currentFirstPage = parseInt($('span:first', $normalPageItem).text());

                    if (currentFirstPage == 1) {
                        return;
                    }

                    if (currentPage == maxPage) {
                        currentPage = currentPage - 10;
                    }
                    else if (currentPage >= 1 && currentPage <= 5) {
                        currentPage = 1;
                    }
                    else if (currentPage > 5) {
                        currentPage = currentPage - 5;

                    }
                    if (currentPage <= 0)
                                {
                                    currentPage = 1;
                                }
                    if (maxPage > 5) {
                        for (var i = 0; i < 5 ; i++) {
                            if (currentFirstPage >= 5) {
                                
                                
                                $('span', $normalPageItem).eq(i).text((i + currentPage));
                            }
                            else if(currentFirstPage<5)
                            {
                                $('span', $normalPageItem).eq(i).text((i + 1));
                            }
                        }
                    }

                    
                    $('span:first', $normalPageItem).addClass("selectedPageItem");
                    $('span:first', $normalPageItem).siblings().removeClass("selectedPageItem");

                    $(this).removeClass("selectedPageItem");
                    $maxPageItem.removeClass("selectedPageItem");


                    
                    opts.refreshDatasource(opts.container, currentPage);

                };
            })

           
            /**************************点击下一页事件******************************************/
            var NextPageClick = function () {
                if (opts.refreshDatasource) {

                    if (currentPage == maxPage) {
                        return;
                    }
                    var currentFirstPage = parseInt($('span:first', $normalPageItem).text());
                    if ((maxPage - (currentFirstPage + 5)) > 0 && (maxPage - (currentFirstPage + 5)) < 5) {
                        for (var i = (currentFirstPage + 5) ; i < (currentFirstPage + 10) ; i++) {

                            var index = (i % 5) - 1;
                            $('span', $normalPageItem).eq(index).text("");
                            if (i < maxPage) {
                                $('span', $normalPageItem).eq(index).text(i);

                            }



                        }
                        currentPage = currentFirstPage + 5;


                    } else if ((maxPage - (currentFirstPage + 5)) >= 5) {
                        var index = 0;
                        for (var j = (parseInt(currentFirstPage) + 5) ; j < (parseInt(currentFirstPage) + 10) ; j++) {


                            ;

                            $('span', $normalPageItem).eq(index).text("");
                            $('span', $normalPageItem).eq(index).text(j);
                            if (j == (parseInt(currentFirstPage) + 9)) {

                                //$pagerItem.append($normalPageItem);
                                //$pagerItem.append($nextPageItem);
                                //$pagerItem.append($maxPageItem);
                                // $maxPageItem.text("");

                                break;

                            }
                            index++;


                            //$normalPageItem.eq()
                        }
                        currentPage = currentFirstPage + 5;
                    }


                    $('span:first', $normalPageItem).addClass("selectedPageItem");
                    $('span:first', $normalPageItem).siblings().removeClass("selectedPageItem");
                    $maxPageItem.removeClass("selectedPageItem");
                    $proviewPageItem.removeClass("selectedPageItem");
                    //刷新

                    if (currentFirstPage != (maxPage - 5)) {
                       
                        opts.refreshDatasource(opts.container, currentPage);
                    }


                }
            }
            $nextMorePageItem.click(function () {

                NextPageClick();

            });

            $nextPageItem.click(function () {


                NextPageClick();
            });
            /**************************点击最大页事件******************************************/

            $maxPageItem.click(function () {

                if (opts.refreshDatasource) {
                    $(this).addClass("selectedPageItem");
                    $('span', $normalPageItem).removeClass("selectedPageItem");
                    $proviewPageItem.removeClass("selectedPageItem");
                    currentPage = maxPage;

                    for (var i = 0; i < 5; i++) {

                        $('span', $normalPageItem).eq(i).text("");
                        if (maxPage>5) {
                            $('span', $normalPageItem).eq(i).text(parseInt(maxPage - 5 + i));
                        } else
                        {
                            $('span', $normalPageItem).eq(i).text(parseInt( 1+ i));

                        }
                    }
                  
                    opts.refreshDatasource(opts.container, currentPage);
                }

            });

            /***************点击对应页数*********************************************/
           
            $('span', $normalPageItem).click(function () {

                if (opts.refreshDatasource) {
                    var currentPage = parseInt($(this).text());
                    if (currentPage) {
                        
                        opts.refreshDatasource(opts.container, currentPage);

                        
                        $(this).addClass("selectedPageItem");
                        $(this).siblings().removeClass("selectedPageItem");
                        $proviewPageItem.removeClass("selectedPageItem");
                        $maxPageItem.removeClass("selectedPageItem");
                        currentSelectPageItemIndex = $($(this), $normalPageItem).index();
                     

                    }
                }
            });
        };

        PaintPager($(this));
        $(this).addClass("pager");
    };

    //重新加载页数
    $.fn.ReloadPage = function (currentPage, rowCount) {
        refreshPage(currentPage, rowCount);
    };
    
})(jQuery)